package com.liliudong.template.biz.service.generate.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liliudong.template.biz.mapper.generate.GenerateProjectMapper;
import com.liliudong.template.biz.service.generate.GenerateProjectService;
import com.liliudong.template.common.convert.generate.GenerateProjectConvert;
import com.liliudong.template.common.dto.generate.GenerateProjectAddDTO;
import com.liliudong.template.common.dto.generate.GenerateProjectModifyDTO;
import com.liliudong.template.common.dto.generate.GenerateProjectPageDTO;
import com.liliudong.template.common.entity.generate.GenerateProject;
import com.liliudong.template.common.vo.PageVO;
import com.liliudong.template.common.vo.generate.GenerateProjectDetailVO;
import com.liliudong.template.common.vo.generate.GenerateProjectPageVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 代码生成-项目配置表 服务实现
 *
 * @author ldli5
 * @date 2024-07-03 12:33:21
 */
@Service
@RequiredArgsConstructor
public class GenerateProjectServiceImpl extends ServiceImpl<GenerateProjectMapper, GenerateProject>
    implements GenerateProjectService {

    @Override
    public void addOne(GenerateProjectAddDTO generateProjectAddDTO) {
        GenerateProject generateProject = GenerateProjectConvert.INSTANCE.addDTO2Entity(generateProjectAddDTO);
    	this.save(generateProject);
    }

    @Override
    public void deleteById(Long id) {
        removeById(id);
    }

    @Override
    public void modifyById(Long id, GenerateProjectModifyDTO generateProjectModifyDTO) {
        GenerateProject generateProject = GenerateProjectConvert.INSTANCE.modifyDTO2Entity(generateProjectModifyDTO);
        generateProject.setId(id);
        this.updateById(generateProject);
    }

    @Override
    public GenerateProjectDetailVO detailById(Long id) {
        GenerateProject generateProject = this.getById(id);
        return GenerateProjectConvert.INSTANCE.entity2DetailVO(generateProject);
    }

    @Override
    public PageVO<GenerateProjectPageVO> queryPage(GenerateProjectPageDTO generateProjectPageDTO) {
        Long page = generateProjectPageDTO.getPage();
        Long size = generateProjectPageDTO.getSize();
        Page<GenerateProject> generateProjectPage = page(
				lambdaQuery()
						.orderByDesc(GenerateProject::getUpdatedAt)
						.page(Page.of(page, size))
		);
		List<GenerateProjectPageVO> pageVOS = GenerateProjectConvert.INSTANCE.entityList2PageVOList(generateProjectPage.getRecords());
		return PageVO.of(generateProjectPage, pageVOS);
    }
}
